//
//  test3.c
//  DiscreteMath_test1
//
//  Created by Xavier on 2023/9/14.
//

#include <stdio.h>
//哈沙德数是指在某个固定的进位制当中，可以被各位数字之和整除的正整数。
//如果一个整数在二进制、八进制、十进制、十六进制下均为哈沙德数，
//那么这个数字就是幸运数字现在他想知道第 2023 个幸运数字是多少？结果为十进制数

//判断十六进制 是否为哈沙德数
int hexadecimal(int num) {
    int tmp = num;
    int sum = 0;
    while (tmp > 0) {
        sum += tmp%16;
        tmp /= 16;
    }
    if (num % sum == 0) {
        return 1;
    }
    return 0;
}

//判断十进制 是否为哈沙德数
int decimalism(int num) {
    int tmp = num;
    int sum = 0;
    while (tmp > 0) {
        sum += tmp%10;
        tmp /= 10;
    }
    if (num % sum == 0) {
        return 1;
    }
    return 0;
}

//判断八进制 是否为哈沙德数
int octonaryNumberSystem(int num) {
    int tmp = num;
    int sum = 0;
    while (tmp > 0) {
        sum += tmp%8;
        tmp /= 8;
    }
    if (num % sum == 0) {
        return 1;
    }
    return 0;
}

//判断二进制 是否为哈沙德数
int binarySystem(int num) {
    int tmp = num;
    int sum = 0;
    while (tmp > 0) {
        sum += tmp%2;
        tmp /= 2;
    }
    if (num % sum == 0) {
        return 1;
    }
    return 0;
}

//int main() {
//    int count = 0;
//    int num = 1;
//    int i = 1;
//    for (i = 1; i < 1000000; i++) {
//        if (binarySystem(i) == 1 && octonaryNumberSystem(i) == 1 && decimalism(i) == 1 && hexadecimal(i) == 1) {
//            ++count;
//        }
//        if (count == 2023) break;
//    }
//    printf("第2023个哈沙德数为：%d\n", i);
//
//    count = 0;
//    num = 1;
//    while(1) {
//        if (binarySystem(num) == 1 && octonaryNumberSystem(num) == 1 && decimalism(num) == 1 && hexadecimal(num) == 1) {
//            ++count;
//        }
//        if (count == 2023) break;
//        ++num;
//    }
//    printf("第2023个哈沙德数为：%d\n", num);
//}
//215040
